package com.kingwang.training.ooad.coffeemaker.hardware.api;

/**
 * 咖啡机API
 *
 * @author King
 */
public interface CoffeeMakerApi {
    /**
     * 返回保温盘传感器状态
     * 传感器检测有没有壶，壶中有没有咖啡
     *
     * @return
     */
    WarmerPlateStatus getWarmerPlateStatus();

    /**
     * 返回加热器开关的状态
     * 加热器开关是浮动的，确保加热器中至少有半杯水
     *
     * @return
     */
    BoilerStatus getBoilerStatus();

    /**
     * 返回冲煮按钮的状态
     * 冲煮按钮是一个瞬时开关，可以记住自己的状态
     * 每次调用这个函数都会返回记忆的状态，然后将该状态重置为NOT_PUSHED
     * <p>
     * 因此，即使以非常慢的速度轮询这个函数，仍然可以在冲煮按钮被按下时检测到
     *
     * @return
     */
    BrewButtonStatus getBrewButtonStatus();

    /**
     * 开/关加热器中的加热元件
     *
     * @param state
     */
    void setBoilerState(BoilerState state);

    /**
     * 开/关保温器中的加热元件
     *
     * @param state
     */
    void setWarmerState(WarmerState state);

    /**
     * 开/关指示灯
     * 冲煮完成时，灯亮；用户按下冲煮按钮时，灯灭
     *
     * @param state
     */
    void setIndecatorState(IndicatorState state);

    /**
     * 开/关减压阀
     * 关闭减压阀时，加热器中的压力使热水喷洒在咖啡过滤器上
     * 打开减压阀时，加热器中的蒸汽排到外部，加热器中的水不会再喷到过滤器上
     *
     * @param state
     */
    void setReliefValveState(ReliefValveState state);
}
